import redis
import json
import time
import sys

def connect_redis():
    """连接到Redis服务器"""
    try:
        redis_client = redis.Redis(
            host='www.v110.cc',  # Redis服务器地址
            port=6379,          # Redis端口
            password='gR0gE9xX', # Redis密码
            decode_responses=True
        )
        # 测试连接
        redis_client.ping()
        return redis_client
    except redis.ConnectionError as e:
        print(f"Redis连接错误: {e}")
        sys.exit(1)

def send_command(redis_client, direction, duration=0):
    """发送控制指令到Redis"""
    command = {
        "direction": direction,
        "duration": duration
    }
    try:
        # 发布命令
        redis_client.publish('motor_control', json.dumps(command))
        # 保存最后一条命令
        redis_client.set('last_motor_command', json.dumps(command))
        print(f"已发送指令: {direction}, 持续时间: {duration}秒")
    except Exception as e:
        print(f"发送指令失败: {e}")

def main():
    # 连接到Redis
    redis_client = connect_redis()
    print("已连接到Redis服务器")

    # 指令映射
    commands = {
        'f': 'forward',
        'b': 'backward',
        'l': 'left',
        'r': 'right',
        's': 'stop'
    }

    print("\n控制指令说明:")
    print("f - 前进")
    print("b - 后退")
    print("l - 左转")
    print("r - 右转")
    print("s - 停止")
    print("q - 退出")
    print("\n输入指令后按回车执行")
    print("输入格式: 指令 持续时间(秒)")
    print("例如: f 2 表示前进2秒")

    while True:
        try:
            # 获取用户输入
            user_input = input("\n请输入指令: ").lower().strip()
            
            # 检查是否退出
            if user_input == 'q':
                print("退出程序")
                break
            
            # 解析输入
            parts = user_input.split()
            cmd = parts[0]
            duration = float(parts[1]) if len(parts) > 1 else 2.0  # 默认2秒
            
            # 检查指令是否有效
            if cmd not in commands:
                print("无效的指令，请重新输入")
                continue
            
            # 发送指令
            send_command(redis_client, commands[cmd], duration)
            
        except KeyboardInterrupt:
            print("\n程序被用户中断")
            break
        except ValueError:
            print("持续时间必须是数字")
        except Exception as e:
            print(f"发生错误: {e}")

if __name__ == "__main__":
    main() 